package com.todo.content.application.handler.changeStatus;

import com.alibaba.fastjson.JSONObject;
import com.todo.content.application.entity.context.ContentStatusContext;
import com.todo.content.common.enums.ContentStatusEnum;
import lombok.extern.slf4j.Slf4j;

/**
 * @author azhebuxing
 * @date 2024/12/12 19:21
 * @description
 */
@Slf4j
public abstract class AbstractContentStatusHandler {


    public ContentStatusEnum getDealStatus() {
        return doGetDealStatus();
    }

    public Boolean statusHandle(ContentStatusContext context) {
        if (!match(context)) {
            log.info("AbstractContentStatusHandler#statusHandle 状态处理匹配，数据不匹配，默认执行成功 content:{}", JSONObject.toJSONString(context));
            return true;
        }
        Boolean result = doStatusHandle(context);
        log.info("AbstractContentStatusHandler#statusHandle 状态处理匹配完成，入参：{},执行结果:{}", JSONObject.toJSONString(context), result);
        return result;

    }

    /**
     * 具体执行数据
     *
     * @param context
     * @return
     */
    protected abstract Boolean doStatusHandle(ContentStatusContext context);

    /**
     * 数据预先匹配
     *
     * @param context
     * @return
     */
    protected abstract boolean match(ContentStatusContext context);

    /**
     * 获取当前处理的状态
     *
     * @return
     */
    protected abstract ContentStatusEnum doGetDealStatus();
}
